package com.sky.controller.admin;


import cn.mybatis.mp.core.mybatis.mapper.context.Pager;
import com.sky.entity.Tags;
import com.sky.exception.BaseException;
import com.sky.result.Result;
import com.sky.service.TagsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author majun
 * @package com.sky.controller.admin
 * @date 2025/6/21 12:20
 */
@RestController
@RequestMapping("/admin/tags")
@Slf4j
public class TagsController {

    @Autowired
    private TagsService tagsService;

    /**
     * 保存标签
     *
     * @param tags 标签
     * @return 响应结果
     */
    @PostMapping("/save")
    private Result save(@RequestBody Tags tags) {

        log.info("保存标签：{}", tags);

        tagsService.save(tags);

        return Result.success();

    }

    /**
     * 按排序获取所有标签名称
     *
     * @return 响应结果
     */
    @GetMapping("/getTagsName")
    private Result<List<String>> getTagsName() {

        log.info("按排序获取所有标签名称");

        List<String> tagsName = tagsService.getTagsName();

        return Result.success(tagsName);
    }

    /**
     * 修改标签
     *
     * @param tags 标签对象
     * @return 响应结果
     */
    @PutMapping("/upDataTags")
    private Result upDataTags(@RequestBody Tags tags) {

        log.info("更新标签");

        if (tags.getName().isEmpty() || tags.getSortOrder() == null) {
            throw new BaseException("参数缺失");
        }

        tagsService.upDataTags(tags);

        return Result.success();

    }

    /**
     * 删除标签
     * @param id 标签id
     * @return 响应结果
     */
    @DeleteMapping("/deleteTags/{id}")
    private Result DeleteTags(@PathVariable String id) {

        log.info("删除标签");

        if (id.isEmpty()) {
            throw new BaseException("参数缺失");
        }

        tagsService.DeleteTags(id);

        return Result.success();

    }

    /**
     * 根据标签名查询标签
     * @param name 标签名
     * @return 响应结果
     */
    @GetMapping("/getTagsByName")
    private Result<List<String>> getTagsByName(@RequestParam String name) {

        log.info("根据标签名查询标签：{}", name);

        List<String> tagsNameList = tagsService.getTagsByName(name);

        return Result.success(tagsNameList);

    }

    /**
     * 分页查询标签
     * @param name 标签名
     * @param page 页码
     * @param pageSize 页大小
     * @return 响应结果
     */
    @GetMapping("/getTagsPage")
    private Result<Pager<Tags>> getTagsPage(@RequestParam(required = false) String name,
                                            @RequestParam(defaultValue = "1") Integer page,
                                            @RequestParam(defaultValue = "10") Integer pageSize) {

        return Result.success(tagsService.getTagsPage(name, page, pageSize));

    }

}
